home *** CD-ROM | disk | FTP | other *** search
/ Night Owl 6 / Night Owl's Shareware - PDSI-006 - Night Owl Corp (1990).iso / 037a / tc256d.zip / SINEC.C < prev    next >
C/C++ Source or Header  |  1991-07-03  |  5KB  |  200 lines

  1. /*  SuperVGA demo program for Turbo C */
  2. /*      By: Thomas Design             */
  3. /*      August 3, 1989                */
  4.  
  5. /*  Compile with alignment "BYTE"     */
  6. /*   for palette routine              */
  7.  
  8. #include <math.h>
  9. #include <graphics.h>
  10. #include <alloc.h>
  11. #include <stdlib.h>
  12. #include "ISVGA256.H"
  13. #include "ISVGADET.H"
  14. #include "VGAEXTRA.H"
  15.  
  16.   int    g_driver,  g_mode, g_error;
  17.   DACarray Palette_Array;              /* create array to hold DAC values */
  18.  
  19.  
  20. /*--------------- Hue Saturation and Value to RGB ----------------*/
  21. void hsv2rgb(float h,float s,float v,RGB *Color)
  22. {
  23.   float h1,f,a[7];
  24.   int   i;
  25.     h1 = h / 60;
  26.     i  = h1;
  27.     f  = h1 - i;
  28.     a[1] = v;
  29.     a[2] = v;
  30.     a[3] = v * (1 - (s*f));
  31.     a[4] = v * (1 - s);
  32.     a[5] = a[4];
  33.     a[6] = v * (1-(s*(1-f)));
  34.     if (i>4) i = i - 4; else i = i + 2;
  35.     Color->Red = a[i];
  36.     if (i>4) i = i - 4; else i = i + 2;
  37.     Color->Green = a[i];
  38.     if (i>4) i = i - 4; else i = i + 2;
  39.     Color->Blue  = a[i];
  40. }
  41. void Build_Chroma(void)
  42. {
  43.     int i;
  44.     int jump=2, min=12, max=60;
  45.     int Cindex = 0;
  46.     int holdr=0, holdg=0, holdb = 0;
  47.     for (i=0; i<9; i++) {
  48.         switch (i) {
  49.             case 0:        /* set up starting color */
  50.                 ++Cindex;
  51.                 holdr = holdg = holdb = min;
  52.                 Palette_Array[Cindex][grn]=min;
  53.                 Palette_Array[Cindex][blu]=min;
  54.                 Palette_Array[Cindex][red]=min;
  55.                 break;
  56.             case 1:
  57.                 do {        /* add in purple to max */
  58.                     ++Cindex;
  59.                     holdb += jump;
  60.                     holdr += jump;
  61.                     Palette_Array[Cindex][blu] = holdb;
  62.                     Palette_Array[Cindex][grn] = min;
  63.                     Palette_Array[Cindex][red] = holdr;
  64.                 } while (holdb < max);
  65.                 break;
  66.             case 2:
  67.                 do {        /* remove red] to leave blu] */
  68.                     ++Cindex;
  69.                     holdr -= jump;
  70.                     Palette_Array[Cindex][blu] = holdb;
  71.                     Palette_Array[Cindex][grn] = holdg;
  72.                     Palette_Array[Cindex][red] = holdr;
  73.                 } while (holdr > min);
  74.                 break;
  75.             case 3:
  76.                 do {        /* add in grn to get cyan */
  77.                     ++Cindex;
  78.                     holdg += jump;
  79.                     Palette_Array[Cindex][grn] = holdg;
  80.                     Palette_Array[Cindex][red] = holdr;
  81.                     Palette_Array[Cindex][blu] = holdb;
  82.                 } while (holdg < max);
  83.                 break;
  84.             case 4:
  85.                 do {        /* remove blu] to leave grn] */
  86.                     ++Cindex;
  87.                     holdb -= jump;
  88.                     Palette_Array[Cindex][grn] = holdg;
  89.                     Palette_Array[Cindex][red] = holdr;
  90.                     Palette_Array[Cindex][blu] = holdb;
  91.                 } while (holdb > min);
  92.                 break;
  93.             case 5:
  94.                 do {        /* add in blu] and red] to get white */
  95.                     ++Cindex;
  96.                     holdb += jump;
  97.                     holdr += jump;
  98.                     Palette_Array[Cindex][grn] = holdg;
  99.                     Palette_Array[Cindex][blu] = holdb;
  100.                     Palette_Array[Cindex][red] = holdr;
  101.                 } while (holdb < max);
  102.                 break;
  103.             case 6:
  104.                 do {        /* remove blu] to leave yellow */
  105.                     ++Cindex;
  106.                     holdb -= jump;
  107.                     Palette_Array[Cindex][blu] = holdb;
  108.                     Palette_Array[Cindex][grn] = holdg;
  109.                     Palette_Array[Cindex][red] = holdr;
  110.                 } while (holdb > min);
  111.                 break;
  112.             case 7:
  113.                 do {        /* remove grn] to leave red] */
  114.                     ++Cindex;
  115.                     holdg -= jump;
  116.                     Palette_Array[Cindex][blu] = holdb;
  117.                     Palette_Array[Cindex][red] = holdr;
  118.                     Palette_Array[Cindex][grn] = holdg;
  119.                 } while (holdg > min);
  120.             case 8:
  121.                 do {        /*  remove red] to fade to black */
  122.                     ++Cindex;
  123.                     holdr -= jump;
  124.                     Palette_Array[Cindex][blu] = holdb;
  125.                     Palette_Array[Cindex][grn] = holdg;
  126.                     Palette_Array[Cindex][red] = holdr;
  127.                 } while (holdr > min);
  128.         }
  129.     }
  130. }
  131.  
  132. /*---------------------- Setup graphics ------------------------*/
  133. void initialize()
  134. {
  135.   int x;
  136.   RGB ColorValue;
  137.   float hue,sat,val;
  138.     installuserdriver("ISVGA256",DetectISVGA256);
  139.     g_driver = DETECT;                 /* must have this line to use User Driver */
  140.     initgraph(&g_driver,&g_mode,"");
  141.     g_error = graphresult();
  142.     if (g_error != 0) {
  143.        printf("%s \n",grapherrormsg(g_error));
  144.        exit(1);
  145.     }
  146.     Build_Chroma();
  147.     Palette_Array[0][red] = 0;
  148.     Palette_Array[0][blu] = 0;
  149.     Palette_Array[0][grn] = 0;
  150.     dacpalette(&Palette_Array);      /* load DAC registers with new colors */
  151. }
  152.  
  153. void sinepas()
  154. {
  155.     int          x1, x2, y2, y1x2, indx1, indx, istep, iq;
  156.     double       angle;
  157.     int          color;
  158.     int          xcon,xmax,ymax;
  159.     initialize();
  160. x1 = getmaxy()/2;
  161. y1x2 = getmaxy()/2;
  162. x2 = getmaxx();
  163. y2 = getmaxy();
  164. xcon = getmaxx()/2;
  165. xmax = getmaxx();
  166. ymax = getmaxy();
  167. istep = 1; iq = 1; angle = 0;
  168. color = 1;
  169. indx  = indx1 = 0;
  170. angle = -3.1415;
  171. do {
  172.     x1 = (cos(angle) * xcon) + xcon;
  173.     y2 = y2 + istep;
  174.     angle = angle + 0.03;
  175.     if (angle > 3.1415) angle = - 3.1415;
  176.     y1x2 = y1x2 + iq;
  177.     if ((y1x2 < 10))  iq =  1;
  178.     if ((y1x2 > ymax)) iq = -1;
  179.     if (y2 < 10)  istep =  1;
  180.     if (y2 > ymax) istep = -1;
  181.     x2 = y1x2 + (sin(angle) * 45);
  182.     setcolor(indx);
  183.     line(x1, y1x2, x2, y2);
  184.     indx  = ++indx;
  185.     indx1 = ++indx1;
  186.     if (indx1 == 2000) {
  187.        indx1 = indx = 0;
  188.        cleardevice();
  189.     }
  190.     if (indx > 186) indx = 1;
  191.   } while (!kbhit()) ;
  192. }
  193.  
  194. main()
  195. {
  196.     sinepas();
  197.     getch();
  198.     restorecrtmode();
  199. }
  200.